package cn.example.vip.mall.canal.listener;

import cn.example.vip.mall.canal.dynamic.DynamicJob;
import cn.example.vip.mall.canal.dynamic.DynamicTaskCreate;
import cn.example.vip.mall.seckill.entity.SeckillActivity;
import com.dangdang.ddframe.job.exception.JobSystemException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import top.javatool.canal.client.annotation.CanalTable;
import top.javatool.canal.client.handler.EntryHandler;

import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.Date;

@Component
@CanalTable("seckill_activity")
public class SeckillActivityHandler implements EntryHandler<SeckillActivity> {
	@Autowired
	private DynamicTaskCreate dynamicTaskCreate;
	
	@Override
	public void insert(SeckillActivity seckillActivity) {
		// 创建任务调度, 活动结束时执行:
		// 2025年3月19日16:53:27
		// ("yyyy-MM-dd HH:mm:ss" 将该时间格式倒序转换为cron表达式格式 "ss mm HH dd MM ? yyyy")
		SimpleDateFormat sdf = new SimpleDateFormat("ss mm HH dd MM ? yyyy");
		String cron = sdf.format(seckillActivity.getEndTime());
		System.out.println(seckillActivity.getEndTime().toString());
		System.out.println(sdf.format(Date.from(Instant.now())) + "，动态定时任务执行时间:" + cron);
		try {
			dynamicTaskCreate.create(seckillActivity.getId(), cron, 1, new DynamicJob(), seckillActivity.getId());
		}catch (JobSystemException e){
			e.printStackTrace();
			System.err.println("永远不会执行的任务");
		}
	}
	
	@Override
	public void update(SeckillActivity before, SeckillActivity after) {
		// 创建任务调度, 活动结束时执行:
		// 2025年3月19日16:53:27
		// ("yyyy-MM-dd HH:mm:ss" 将该时间格式倒序转换为cron表达式格式 "ss mm HH dd MM ? yyyy")
		SimpleDateFormat sdf = new SimpleDateFormat("ss mm HH dd MM ? yyyy");
		String cron = sdf.format(after.getEndTime());
		System.out.println(after.getEndTime().toString());
		System.out.println(Date.from(Instant.now()).toString() + "，动态定时任务执行时间:" + cron);
		try {
			dynamicTaskCreate.create(after.getId(), cron, 1, new DynamicJob(), after.getId());
		}catch (JobSystemException e){
			e.printStackTrace();	// 永远不会执行的任务
			System.err.println("永远不会执行的任务");
		}
	}
	
	@Override
	public void delete(SeckillActivity seckillActivity) {
		EntryHandler.super.delete(seckillActivity);
	}
}
